#include <stdlib.h>

typedef int ElementType;
typedef struct DLNode{
    ElementType data;
    // next为后驱结点，prior为前驱结点
    struct DLNode *next,*prior;
}DLNode,*DLinkedList;

// 初始化双向链表
bool initList(DLinkedList &L){
    // 初始化头结点
    L = (DLNode*) malloc(sizeof(DLNode));
    if(L== NULL) return false; // 内存分配失败
    L->prior = NULL; // 头结点的prior永远指向NULL
    L->next = NULL; // 头结点之后暂时没有新结点
    return true;
}

// 双链表插入：在p结点之后插入s结点
bool insertBeforeNode(DLNode *p,DLNode *s){
    if(p == NULL || s== NULL) return false;
    s->next = p->next;
    if(p->next != NULL){
        // p有后继结点，则该后继结点的前驱指向s
        p->next->prior = s;
    }
    p->next = s;
    s->prior = p;
    return true;
}

// 双链表删除：删除p结点的后继结点
bool deleteNode(DLNode *p){
    if(p == NULL) return false;
    DLNode *t = p->next; // 获取后继结点
    if( t==NULL) return false; // p没有后继结点
    p->next = t->next;
    if(t->next != NULL){ // t不是最后一个结点
        t->next->prior = p;
    }
    free(t); // 释放删除的结点的空间
    return true;
}
int main() {

    return 0;
}
